import numpy as np
import matplotlib.pyplot as plt

# 中文显示
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

# 反例：说明g(x)≠u₀条件的重要性
def composite_limit_counterexample():
    # 定义函数
    def f(u):
        # 在u=2处有间断的函数
        return np.where(u == 2, 2, 1)
    
    def g(x):
        # 常值函数，恒等于2
        return 2 * np.ones_like(x)
    
    # 生成数据点
    x_vals = np.linspace(0.5, 1.5, 100)
    u_vals = g(x_vals)
    y_vals = f(u_vals)
    
    # 理论分析
    print("复合函数极限反例分析:")
    print("内层函数g(x)=2，lim(x→1)g(x)=2")
    print("外层函数f(u)在u≠2时值为1，在u=2时值为2")
    print("lim(u→2)f(u)=1（因为u趋近2但不等于2时，f(u)=1）")
    print("但复合函数f(g(x))=f(2)=2（常值函数）")
    print("所以lim(x→1)f(g(x))=2 ≠ lim(u→2)f(u)=1")
    print("这是因为在x=1的去心邻域内，恒有g(x)=2=u₀，不满足定理条件")
    
    # 可视化
    plt.figure(figsize=(10, 6))
    
    plt.subplot(1, 2, 1)
    u_range = np.linspace(1.5, 2.5, 100)
    f_u = f(u_range)
    plt.plot(u_range, f_u, 'b-', linewidth=2)
    plt.plot(2, 2, 'ro', markersize=8, label='点(2,2)')
    plt.axvline(x=2, color='r', linestyle='--', alpha=0.5)
    plt.xlabel('u')
    plt.ylabel('f(u)')
    plt.title('外层函数 f(u)')
    plt.grid(True, alpha=0.3)
    plt.legend()
    
    plt.subplot(1, 2, 2)
    plt.plot(x_vals, y_vals, 'g-', linewidth=2)
    plt.axvline(x=1, color='r', linestyle='--', alpha=0.5)
    plt.xlabel('x')
    plt.ylabel('f(g(x))')
    plt.title('复合函数 f(g(x))')
    plt.grid(True, alpha=0.3)
    
    plt.tight_layout()
    plt.show()

composite_limit_counterexample()